Estructuras dinámicas de datos
Consultas, lista de correo 'C++ Con Clase' 'C++ Con Clase' página de entrada Librerías estándar C Tabla de contenido Contactar con Webmaster
*Introducción
*1. Listas abiertas
 . 1.1 Definición
 . 1.2 Tipos de datos
 . 1.3 Operaciones básicas
 . 1.4 Insertar elementos
 . 1.5 Localizar elementos
 . 1.6 Eliminar elementos
 . 1.7 Moverse en una lista
 . 1.8 Borrar una lista
 . 1.9 Ejemplo en C
 . 1.10 Ejemplo C++
 . 1.11 Ejemplo C++ con plantillas
*2. Pilas
*3. Colas
*4. Listas circulares
*5. Listas doblemente enlazadas
*6. Árboles
*7. Árboles binarios de búsqueda (ABB)
*8. Árboles AVL
*Descarga de ejemplos
<< < > >>

1.6 Eliminar elementos en una lista abierta:  

De nuevo podemos encontrarnos con varios casos, según la posición del nodo a eliminar.

Eliminar el primer nodo de una lista abierta:

Es el caso más simple. Partiremos de una lista con uno o más nodos, y usaremos un puntero auxiliar, nodo:

  1. Hacemos que nodo apunte al primer elemento de la lista, es decir a Lista.
  2. Asignamos a Lista la dirección del segundo nodo de la lista: Lista->siguiente.
  3. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.

Si no guardamos el puntero al primer nodo antes de actualizar Lista, después nos resultaría imposible liberar la memoria que ocupa. Si liberamos la memoria antes de actualizar Lista, perderemos el puntero al segundo nodo.

Si la lista sólo tiene un nodo, el proceso es también válido, ya que el valor de Lista->siguiente es NULL, y después de eliminar el primer nodo la lista quedará vacía, y el valor de Lista será NULL.

De hecho, el proceso que se suele usar para borrar listas completas es eliminar el primer nodo hasta que la lista esté vacía.

Eliminar un nodo cualquiera de una lista abierta:

En todos los demás casos, eliminar un nodo se puede hacer siempre del mismo modo. Supongamos que tenemos una lista con al menos dos elementos, y un puntero al nodo anterior al que queremos eliminar. Y un puntero auxiliar nodo.

El proceso es parecido al del caso anterior:

  1. Hacemos que nodo apunte al nodo que queremos borrar.
  2. Ahora, asignamos como nodo siguiente del nodo anterior, el siguiente al que queremos eliminar: anterior->siguiente = nodo->siguiente.
  3. Eliminamos la memoria asociada al nodo que queremos eliminar.

Si el nodo a eliminar es el último, es procedimiento es igualmente válido, ya que anterior pasará a ser el último, y anterior->siguiente valdrá NULL.

<< < > >>